const path = require('path')
const { createApiJs, createStoreJs } = require('chenms_auto_create_file_plus')
const commonJson = {
  hostname: '127.0.0.1',
  port: 4523,
  path: '/export/openapi?projectId=3440180&specialPurpose=openapi-generator',

  //   hostname: '39.106.196.57',
  //   port: 3000,
  //   path: '/api/open/plugin/export-full?type=json&pid=150&status=all&token=9e5b30f82c324b31b4826cd54593a608a7301326e0e65e8948b313cc02808980',
  /**
   * 自动生成文件的工具,目前只支持apifox跟yapi
   */
  interfaceType: 'apifox',
  //   interfaceType: 'yapi',
  /**
   * 不自动生成接口的url,这个字段主要用来过滤不想生成接口的url
   */
  excludeList: ['/send/sms'],
  /**
   * 对path进行处理的回调(如果有其他特殊符号要记得自己处理下)
   * 这个要处理成什么样子完全由自己决定
   * 不设置的话会默认返回小驼峰, 如:参数path为 /my/list/detailed的接口 会默认返回 myListDetailed
   * 注意:1.这个function的返回值只能是字符串,如果返回其他类型的则会返回默认设置
   *      2.如果直接返回pathTitle也会返回默认设置
   */
  formatePathCb: function (pathTitle, methods, json) {
    return pathTitle.replace(/\/|\-|\_|\{|\}/g, '') + methods
  },
  /**
   * 对生成的文件名称进行处理
   * 不设置的话会默认返回 `${folderTitle}`名称
   * 注意:1.这个function的返回值只能是字符串,如果返回其他类型的则会返回默认设置
   *      2.如果直接返回folderTitle也会返回默认设置
   */
  formateFileNameCb: function (folderTitle) {
    return folderTitle.split('--')[1]
  }
}
createApiJs({
  ...commonJson,
  /**
   * 生成文件的根目录名称路径
   */
  createPath: path.resolve(__dirname, '../src/api'),
  /**
   * 头部需要引入的插件
   */
  topTemplate: `import hyRequest from "@/service/index"`,

  /**
   * 对生成的api里的body进行处理(必填)
   * 返回值必须是字符串类型
   * 不填或者返回空的话会默认填入 request.${methods.toLowerCase()}("${url}", data)
   * @author chenms
   * @param {String} methods 接口的请求方式
   * @param {String} url 接口的url
   */
  formateApiBodyCb: function (methods, url) {
    return `hyRequest.${methods.toLowerCase()}("${url}", data);`
  }
})

createStoreJs({
  ...commonJson,
  /**
   * 生成文件的根目录名称路径
   */
  createPath: path.resolve(__dirname, '../src/store'),
  /**
   * 导入api目录的前缀
   */
  apiPrefix: '@/api',
  /**
   * 对生成的action里的body进行处理(action里的各个函数完成由自己定义,非常灵活)
   * 返回值必须是字符串类型
   * 不填或者返回空的话会默认填入
   *  const res = await ${pathTitle}(data)
   *  this.${stateName} = res
   *  return res
   *  @author chenms
   *  @param {String} pathTitle 接口的url(formatePathCb回调处理过的)
   *  @param {String} actionName action里各个函数的名称
   *  @param {String} stateName state里各个data的名称
   *  @param {String} interfaceName interface里各个data对应的interface名称(formateInterfaceCb回调处理过的)
   *  @param {String} mutationsName mutations里各个data对应的mutations名称(formateMutationsCb回调处理过的)
   *  @param {String} annotationDesName 是api interface state mutation action等类型的注释标记
   *  @param {String} summary 该接口的名称
   */
  formateActionBodyCb: function (
    pathTitle,
    actionName,
    stateName,
    interfaceName,
    mutationsName,
    annotationDesName,
    summary
  ) {
    return `
        /**
         * @${annotationDesName} ${actionName}
         * @title ${summary}888
         */
        async ${actionName}(data){
          try {
              const res = await ${pathTitle}(data)
              this.${stateName} = res
              return res
          } catch(err) {
              console.log(err)
          }
        },
      `
  },
  /**
   * 对生成的state里的body进行处理(state里的各个属性完成由自己定义,非常灵活)
   * 返回值必须是字符串类型
   * 不填或者返回空的话会默认填入
   * ${stateName}: {}
   *  @author chenms
   *  @param {String} pathTitle 接口的url(formatePathCb回调处理过的)
   *  @param {String} actionName action里各个函数的名称
   *  @param {String} stateName state里各个data的名称
   *  @param {String} interfaceName interface里各个data对应的interface名称(formateInterfaceCb回调处理过的)
   *  @param {String} mutationsName mutations里各个data对应的mutations名称(formateMutationsCb回调处理过的)
   *  @param {String} annotationDesName 是api interface state mutation action等类型的注释标记
   *  @param {String} summary 该接口的名称
   */
  formateStateBodyCb: function (
    pathTitle,
    actionName,
    stateName,
    interfaceName,
    mutationsName,
    annotationDesName,
    summary
  ) {
    return `
      /**
       * @${annotationDesName} ${stateName}
       * @title ${summary}999
       */
      ${stateName}333: {},
    `
  },
  /**
   * 对pinia的action里的数据字段进行处理
   * 不设置的话会默认返回 `${pathTitle}Api` 也就是处理后的path前面加Api
   * 注意:1.这个function的返回值只能是字符串,如果返回其他类型的则会返回默认设置
   *      2.如果直接返回pathTitle也会返回默认设置
   * @author chenms
   * @param {String} pathTitle 接口的url(formatePathCb回调处理过的)
   */
  formateActionCb: function (pathTitle) {
    return `${pathTitle}Apiiii`
  },
  /**
   * 对pinia的state里的数据字段进行处理
   * 不设置的话会默认返回 `${pathTitle}Data` 也就是处理后的path前面加Data
   * 注意:1.这个function的返回值只能是字符串,如果返回其他类型的则会返回默认设置
   *      2.如果直接返回pathTitle也会返回默认设置
   * @author chenms
   * @param {String} pathTitle 接口的url(formatePathCb回调处理过的)
   */
  formateStateCb: function (pathTitle) {
    return `${pathTitle}Databbb`
  }
})
